﻿#pragma once

//头文件
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define MAX 100//通讯录最大存储量
#define MAX_NAME 20//名字最大容量
#define MAX_SEX 5//性别最大容量
#define MAX_TELE 12//电话最大容量
#define MAX_ADDR 30//地址最大容量

#define DEFAULT_SZ 3//默认最初的容量
#define INC_SZ 2//一次增加几个容量

//表示一个人的信息
typedef struct PeoInfo
{
	char name[MAX_NAME];//名字
	int age;//年龄
	char sex[MAX_SEX];//性别
	char tele[MAX_TELE];//电话
	char addr[MAX_ADDR];//住址
}PeoInfo;

//静态版本
//定义一个通讯录的类型
//typedef struct Contact
//{
//	PeoInfo data[MAX];//存放数据
//	int sz;//记录通讯录中的有效信息个数
//}Contact;

//文件动态版本
//1.默认能存放3个人的信息
//2.不够的话，每次增加2个人的信息
typedef struct Contact
{
	PeoInfo* data;//data指向了存放数据的空间
	int sz;//记录通讯录中的有效信息个数
	int capacity;//记录通讯录当前的容量
}Contact;


//typedef struct Contact
//{
//	PeoInfo data[MAX];//存放数据
//	int sz;//记录通讯录中的有效信息个数
//}Contact，*pConact;
//这里的写法意思是把struct Contact重命名为Contact，把struct Contact* 重命名为*pContact

//加载原通讯录
void LoadContact(Contact* pc);

//初始化
void InitContact(Contact* pc);

//增加指定联系人
void AddContact(Contact* pc);

//删除指定联系人
void DelContact(Contact* pc);

//查找指定联系人
void SearchContact(const Contact* pc);

//修改指定联系人
void ModifyContact(Contact* pc);

//显示联系人
void ShowContact(const Contact* pc);

//一个辅助查找的函数
int FindByName(const Contact* pc, char* name);

//排序
void SortContact(Contact* pc);

//检查容量
void CheckCapacity(Contact* pc);

//销毁通讯录
void DestroyContact(Contact* pc);

//保存通讯录
void SaveContact(Contact* pc);